//引入express
var express = require('express')
var fs = require('fs')
var path = require('path')
//导入jsonwebtoken包
var jwt=require('jsonwebtoken')

//在app上定义的路由为主路由
//创建子路由对象(用来管理一部分后端路由)
var userRouter = express.Router()

//分页查询
userRouter.get('/list', (req, res) => {

    //回调函数有两个参数req和res
    //req：请求对象，包含了和本次请求相关的所有信息(请求地址，请求方式，请求的参数)
    //res：响应对象，可以借助res向客户端(浏览器)返回信息(字符串，json格式数据，网页)

    console.log('收到了来自客户端的请求');

    //获取get类型请求的参数 req.quary
    var { page, count } = req.query
    //如果前端发送的请求中包含参数，则需要用到req.query属性
    // console.log(req.query);
    // console.log(req.query.page);
    //为了更方便的拿到值，对对象进行结构

    // let page = req.query.page
    // let count = req.query.count
    //读取json.user中的用户数据 _dirname可以获取当前文件夹的路径
    var filepath = path.join('__dirname', '../json/user.json')
    //读取文件的的内容并将它保存在arr中
    var arr = fs.readFileSync(filepath)
    //进行转数据，如果json中有数据，则将它转为json格式对象，如果没有数据，则给一个空数组
    arr = arr.toString() ? JSON.parse(arr) : []

    //进行分页，通过slice Api进行选取
    var newarr = arr.slice((page - 1) * count, page * count)

    //返回数据，是一个对象
    res.send({ code: 200, msg: '请求很成功', list: newarr })
})

//模糊搜索
userRouter.get('/search', (req, res) => {
    //接收参数
    var { searchkey } = req.query

    //读取json.user中的用户数据 _dirname可以获取当前文件夹的路径
    var filepath = path.join('__dirname', '../json/user.json')
    //读取文件的的内容并将它保存在arr中
    var arr = fs.readFileSync(filepath)
    //进行转数据，如果json中有数据，则将它转为json格式对象，如果没有数据，则给一个空数组
    arr = arr.toString() ? JSON.parse(arr) : []

    //根据参数，从name属性中过滤
    var newarr = arr.filter((item) => {
        //请求的数据中是否包含该字符
        return item.name.includes(searchkey)
    })
    res.send({ code: 200, msg: '请求成功', list: newarr })
})

//登录接口
userRouter.post('/login', (req, res) => {
    console.log(23);
    //接收参数
    var { phone, pass } = req.body

    //读取json.user中的用户数据 _dirname可以获取当前文件夹的路径
    var filepath = path.join(__dirname, '../json/user.json');
    //读取文件的的内容并将它保存在arr中
    var arr = fs.readFileSync(filepath)
    //进行转数据，如果json中有数据，则将它转为json格式对象，如果没有数据，则给一个空数组
    arr = arr.toString() ? JSON.parse(arr) : []
    var i = arr.findIndex((item, index) => {
        return item.phone == phone && item.pass == pass;
    })

    if (i != -1) {
        //登录成功后，生成token身份令牌,借助第三方包jsonwebtoken生成token字符串
        //jwt.sign语法有三个参数，第一个参数是要加密的数据，第二个参数是密钥，也可以用它解密，第三个参数是加密的方法和过期时间，在对象中保存着
        var token=jwt.sign({phone},'1234',{algorithm:'HS256',expiresIn:5*60*1000})
        res.send({ code: 200, msg: '登陆成功', userinfo: arr[i], token })
    } else {
        res.send({ code: 400, msg: '登录失败' })
    }
})

//注册接口
userRouter.post('/register', (req, res) => {
    var { phone } = req.body

    //读取json.user中的用户数据 _dirname可以获取当前文件夹的路径
    var filepath = path.join('__dirname', '../json/user.json')
    //读取文件的的内容并将它保存在arr中
    var arr = fs.readFileSync(filepath)
    //进行转数据，如果json中有数据，则将它转为json格式对象，如果没有数据，则给一个空数组
    arr = arr.toString() ? JSON.parse(arr) : []
    //判断新用户是否存在
    var i = arr.findIndex((item) => {
        return item.phone == phone
    })
    //用户存在,注册失败
    if (i != -1) {
        res.send({ code: 400, msg: '注册失败' })

    } else {
        //添加新用户到users.json中
        arr.push({ ...req.body, ingroup: '编辑组', isadmin: true, status: true })
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8');
        res.send({ code: 200, msg: '注册成功!' })
    }
})

//删除接口
userRouter.post('/delete', (req, res) => {
    //获取手机号 参数
    var { phone } = req.body;
    //读取json.user中的用户数据 _dirname可以获取当前文件夹的路径
    var filepath = path.join('__dirname', '../json/user.json')
    //读取文件的的内容并将它保存在arr中
    var arr = fs.readFileSync(filepath)
    //进行转数据，如果json中有数据，则将它转为json格式对象，如果没有数据，则给一个空数组
    arr = arr.toString() ? JSON.parse(arr) : []

    //在arr中查找手机号对应的用户
    var i = arr.findIndex((item) => {
        return item.phone == phone;
    })
    console.log(34);
    if (i != -1) { //条件成立, 说明 找到了需要删除的用户.它在arr中的下标是 i
        arr.splice(i, 1);
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8');
        //分页
        var newarr = arr.slice(0, 2);
        //返回删除后,第1页的新数据
        res.send({ code: 200, msg: '删除成功!', list: newarr })
    } else {
        res.send({ code: 400, msg: '删除失败!' })
    }

})

//导出这个子路由对象
module.exports = userRouter
